package cn.edu.klmy.dao;

import cn.edu.klmy.models.student.Student;

import java.util.List;
import java.util.Map;

/**
 * 学生基础设施接口（仅仅操作Student一张表）。
 */
public interface IStudentDao {
    /**
     * 增加学生。
     * @param student 学生实体
     */
    void addStudent(Student student);

    /**
     * 删除学生。
     * @param studentId 学生ID
     */
    void removeStudent(int studentId);

    /**
     * 更新学生信息。
     * @param student 学生实体
     */
    void updateStudent(Student student);

    /**
     * 获取某一个特定学生。提供的字段期望为唯一性字段，比如ID，身份证号等，如果提供的查询字段查询出来多条纪录，仅仅会返回一条记录。
     * @param fieldName 字段名称
     * @param value 字段值
     * @return 学生实体
     */
    Student getStudent(String fieldName, Object value);

    /**
     * 学生是否存在。
     * @param studentId 学生ID
     * @return
     */
    boolean studentExists(int studentId);
    boolean studentExistsByIdentityCardNumber(String identityCardNumber);

    /**
     * 模糊查询学生数据，分页数据，如果不需要分页，可以将pageSize设置足够大。
     * @param filter key与value的map，value可以是精确值，也可以模糊值
     * @param pageNum 页码
     * @param pageSize 每页个数
     * @return 学生集合
     */
    List<Student> getStudents(Map<String, Object[]> filter, int pageNum, int pageSize);

    /**
     * 查询学生的总个数，模糊查询。
     * @param filter key与value的map，value可以是精确值，也可以模糊值
     * @return 学生纪录数
     */
    int getStudentCount(Map<String, Object[]> filter);
}
